package com.eslag.rpc.serializer;
/**
 * 通用的序列化反序列化接口
 *
 *  主要就是四个方法，
 *      序列化，
 *      反序列化，
 *      获得该序列化器的编号，
 *      已经根据编号获取序列化器
 *
 */
public interface CommonSerializer {

    Integer KRYO_SERIALIZER = 0;
    Integer JSON_SERIALIZER = 1;
    Integer HESSIAN_SERIALIZER = 2;
    Integer PROTOBUF_SERIALIZER = 3;

    // 设置一个默认序列化器
    Integer DEFAULT_SERIALIZER = KRYO_SERIALIZER;
    static CommonSerializer getByCode(int code) {
        return switch (code) {
            case 0 -> new KryoSerializer();
            case 1 -> new JsonSerializer();
            case 2 -> new HessianSerializer();
            case 3 -> new ProtobufSerializer();
            default -> null;
        };
    }

    byte[] serialize(Object obj);

    Object deserialize(byte[] bytes, Class<?> clazz);

    int getCode();

}
